home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / ASM / JOY.ASM < prev    next >
Assembly Source File  |  2000-09-26  |  5KB  |  237 lines

  1. code   segment
  2.  
  3.  assume cs:code,ds:code
  4.  org 0
  5.  
  6. jIntNum   equ 28
  7.  
  8. befehl    equ 2
  9. status    equ 3
  10. end_adr   equ 14
  11.  
  12. cmd       equ 16384
  13. arg1      equ cmd+0
  14. arg2      equ cmd+2
  15. arg3      equ cmd+4
  16. arg4      equ cmd+6
  17. arg5      equ cmd+8
  18.  
  19. buf_seg   equ 22
  20.  
  21. erst_b    equ this byte
  22.  
  23. treiber:
  24.          dw -1,-1             ; DOS-Intern
  25.          db 0,80h             ; Flags
  26. soffset  dw offset strat      ; Strategie-Routine
  27. ioffset  dw offset intr       ; Interrupt-Routine
  28.          db "$JOY0000"        ; Kennung
  29.  
  30.  
  31. janus_seg   dw (?)
  32. janus_ofs   dw (?)
  33. db_ptr      dw (?),(?)
  34.  
  35. old_int      equ this dword
  36. old_int_ofs  dw 0
  37. old_int_seg  dw 0
  38.  
  39. dummy  proc far
  40.  ret
  41. dummy  endp
  42.  
  43.  ; ************ Joystick-Interrupt fr Vektor $15
  44. new_int  proc far
  45.  cmp ah,84h
  46.  jne jump
  47.  
  48.  cmp dx,0
  49.  jne richtung
  50.  
  51. feuer:
  52.  pushf
  53.  call [cs:old_int]
  54.  push es
  55.  push di
  56.  mov es,cs:janus_seg
  57.  mov di,cs:janus_ofs
  58.  mov es:w[di+arg1],2
  59.  mov es:w[di+arg2],ax
  60.  call near call_and_wait
  61.  mov ax,es:w[di+arg2]
  62.  pop di
  63.  pop es
  64.  iret
  65.  
  66. richtung:
  67.  pushf
  68.  call [cs:old_int]
  69.  push es
  70.  push di
  71.  mov es,cs:janus_seg
  72.  mov di,cs:janus_ofs
  73.  mov es:w[di+arg1],1
  74.  mov es:w[di+arg2],ax
  75.  mov es:w[di+arg3],bx
  76.  mov es:w[di+arg4],cx
  77.  mov es:w[di+arg5],dx
  78.  call near call_and_wait
  79.  mov ax,es:w[di+arg2]
  80.  mov bx,es:w[di+arg3]
  81.  mov cx,es:w[di+arg4]
  82.  mov dx,es:w[di+arg5]
  83.  pop di
  84.  pop es
  85.  iret
  86.  
  87. jump:
  88.  jmp [cs:old_int]
  89. new_int  endp
  90.  
  91.  
  92. call_and_wait  proc near
  93.  mov ah,7
  94.  mov al,jIntNum
  95.  int 0b
  96.  mov ah,8
  97.  mov al,jIntNum
  98.  int 0b
  99.  ret
  100. call_and_wait  endp
  101.  
  102.  
  103. ende  equ this byte
  104.  ; ------------ Ende des Treiberprogramms ------------
  105.  
  106.  
  107.  ; ************ Interruptroutine des Treibers
  108.  
  109. strat  proc far
  110.  mov cs:db_ptr,bx
  111.  mov cs:db_ptr+2,es
  112.  ret
  113. strat  endp
  114.  
  115. intr   proc far
  116.  pusha
  117.  push cs
  118.  pop ds
  119.  
  120.  les di,dword ptr db_ptr
  121.  mov bl,es:[di+befehl]
  122.  cmp bl,0
  123.  je bc_okay
  124.  
  125.  mov ax,8003h
  126.  jmp short intr_end
  127.  
  128. bc_okay:
  129.  call init
  130.  
  131. intr_end  label near
  132.  or ax,0100h
  133.  mov es:[di+status],ax
  134.  
  135.  popa
  136.  ret
  137. intr  endp
  138.  
  139.  
  140. init   proc near
  141.  mov dx,offset initm
  142.  mov ah,9
  143.  int 21h
  144.  
  145.  push es
  146.  push di
  147.  mov ah,1
  148.  mov al,jIntNum
  149.  int 0b
  150.  mov ax,di
  151.  mov janus_ofs,di
  152.  mov janus_seg,es:w[buf_seg]
  153.  pop di
  154.  pop es
  155.  cmp ax,-1
  156.  jne janus_okay
  157.  
  158.  mov dx,offset kserv
  159.  mov ah,9
  160.  int 21h
  161.  
  162.  mov word ptr es:[di+end_adr],offset treiber
  163.  mov word ptr es:[di+end_adr+2],cs
  164.  jmp near init_ende
  165.  
  166. janus_okay:
  167.  push cs
  168.  pop ds
  169.  
  170.  mov word ptr es:[di+end_adr],offset ende
  171.  mov word ptr es:[di+end_adr+2],cs
  172.  mov ioffset,offset dummy
  173.  mov soffset,offset dummy
  174.  
  175.  mov es,cs:janus_seg
  176.  mov di,cs:janus_ofs
  177.  mov es:w[di+arg1],3
  178.  call near call_and_wait
  179.  
  180.  mov ah,35h
  181.  mov al,15h
  182.  int 21h
  183.  mov old_int_ofs,bx
  184.  mov old_int_seg,es
  185.  
  186.  mov ah,25h
  187.  mov al,15h
  188.  mov dx,offset new_int
  189.  int 21h 
  190.  
  191.  mov dx,offset sokay
  192.  mov ah,9
  193.  int 21h 
  194.  
  195. init_ende:
  196.  xor ax,ax
  197.  ret
  198. init  endp
  199.  
  200.  
  201. exe_start  proc far
  202.  push cs
  203.  pop ds
  204.  
  205.  mov ah,9
  206.  mov dx,offset infot
  207.  int 21h
  208.  
  209.  mov ax,4c00
  210.  int 21h
  211. exe_start  endp
  212.  
  213.  
  214.  ; ************ Installationsmeldungen beim Start
  215. initm db "ATUtilities Joystick-Manager  -  Version 2.0   17. September 1993",13,10
  216.       db "Copyright (C) 1993 by Thomas Dreibholz.  All rights reserved.",13,10,"$"
  217. sokay db "Treiber wurde erfolgreich installiert.",13,10,10,"$"
  218. kserv db "Amiga-Treiber an Janus-Interrupt 28 ist nicht aktiv.",13,10
  219.       db "Bitte berprfen Sie die Installation der ATUtilities.",13,10
  220.       db "Treiber konnte nicht installiert werden.",13,10,10,"$"
  221. infot db "ATUtilities Joystick-Manager:",13,10
  222.       db "Dieses Programm ist ein Treiberprogramm und kann deshalb nicht direkt ausge-",13,10
  223.       db "fhrt werden. Um den Treiber zu installieren, muá folgende Zeile in die",13,10
  224.       db "CONFIG.SYS eingefgt werden:",13,10,10
  225.       db "DEVICE=Lw:\Verz\JOY.EXE",13,10,10
  226.       db "Nach dem n„chsten Reset steht der Joystick-Manager zur Verfgung. Beim Ein-",13,10
  227.       db "binden des Programms durch die CONFIG.SYS muá auf dem Amiga das Programm",13,10
  228.       db "Joystick-Manager aktiv sein.",13,10
  229.       db "JOY.EXE f„ngt alle Aufrufe fr die",13,10
  230.       db "Joystick-Funktionen des Interrupt 15h ab und leitet sie auf dem Amiga",13,10
  231.       db "um. Alle Programme, deren Abfrage ber diese Funktionen l„uft, k”nnen",13,10
  232.       db "nun dem Joystick im rechten Amiga-Port nutzen.",13,10,10
  233.       db "17. 09. 1993 - Version 2.0  Copyright (C) 1993 by Thomas Dreibholz",13,10,10,"$"
  234.  
  235. code  ends
  236.  end exe_start
  237.